﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Systemet.Views
{
    public partial class BudgeteringPerKund : UserControl
    {

        private List<Intäktsbudget> budgets;
        private IEnumerable<Produktregister> productList;
        private Domain.ProdukController pC;
        private KundController kC;
        private bool IsNewBudget = false;
        private int currentBudgetID;
        private string currentKundID;
        private string currentKundNamn;
        private Domain.TextfileController tfc;
        private Domain.RapportController rC;
        private const int prodIDColumn = 0;
        private const int prodNameColumn = 1;
        private const int customerIDColumn = 2;
        private const int customerNameColumn = 3;
        private const int avtalColumn = 4;
        private const int gradAvtalColumn = 5;
        private const int tilläggColumn = 6;
        private const int gradTilläggColumn = 7;
        private const int budgetColumn = 8;
        private const int timColumn = 9;
        private const int commentColumn = 10;
        private const int låstColumn = 11;
        private const int dateColumn = 12;
        private const int signeradColumn = 13;
        private const int intäktsBudgIDColumn = 14;
        private const int prodgruppColumn = 15;
        private const int avdelningColumn = 16;

        public BudgeteringPerKund()
        {
            InitializeComponent();
            AccessController.Instance.MainView = this;
        }

        public void clearDatagridView()
        {
            if (this.dgvBPK.DataSource != null)
            {
                this.dgvBPK.DataSource = null;
            }
            else
            {
                this.dgvBPK.Rows.Clear();
            }
            IsNewBudget = true;
            clearTbs();
            IsNewBudget = false;
        }

        public void getCurrentCustomer(string kundNamn, string kundID)
        {
            currentKundNamn = kundNamn;
            currentKundID = kundID.TrimEnd();
            lblKundID2.Text = "KundID: " + kundID;
            lblKundnamn2.Text = "Kundnamn: " + kundNamn;
            if (flpCateGroupFilters.Height > 0)
            {
                flpCateGroupFilters.Height = 0;
            }
            IsNewBudget = false;
            EditableTbs(IsNewBudget);
            if (kundID != "")
            {
                btnNyRad.Enabled = true;
            }
            else
            {

                btnNyRad.Enabled = false;
            }


        }
        //Vald kund fyller datagridviewn,och namn uppdateras
        public void UpdateMainDgv(List<Intäktsbudget> CustomerBudgets)
        {
            IsNewBudget = true;
            clearTbs();
            IsNewBudget = false;
            EditableTbs(false);


            if (CustomerBudgets.Count > 0)
            {
                budgets = CustomerBudgets;
                dgvBPK.DataSource = CustomerBudgets;
                dgvBPK.Columns[customerIDColumn].Visible = false;
                dgvBPK.Columns[customerNameColumn].Visible = false;
                dgvBPK.Columns[låstColumn].Visible = false;
                dgvBPK.Columns[dateColumn].Visible = false;
                dgvBPK.Columns[avdelningColumn].Visible = false;
                dgvBPK.Columns[intäktsBudgIDColumn].Visible = false;
                dgvBPK.Columns[prodgruppColumn].Visible = false;
                dgvBPK.Columns["Avtal"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                dgvBPK.Columns["Tillägg"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                dgvBPK.Columns["Budget"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                dgvBPK.Columns["Timmar"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                dgvBPK.Columns["Avtal"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
                dgvBPK.Columns["Tillägg"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
                dgvBPK.Columns["Budget"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
                dgvBPK.Columns["Timmar"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
                dgvBPK.Columns["AvserDatum"].Visible = false;
                RetrieveProducts();


                dgvBPK.Columns[prodIDColumn].Width = 60;
                dgvBPK.Columns[prodNameColumn].Width = 130;
                dgvBPK.Columns[avtalColumn].Width = 60;
                dgvBPK.Columns[gradAvtalColumn].Width = 70;
                dgvBPK.Columns[tilläggColumn].Width = 60;
                dgvBPK.Columns[gradTilläggColumn].Width = 70;
                dgvBPK.Columns[budgetColumn].Width = 60;
                dgvBPK.Columns[timColumn].Width = 60;
                dgvBPK.Columns[commentColumn].Width = 260;
                lblTotalbelopp.Visible = true;
                tBSumAvtal.Visible = true;
                tbSumTillägg.Visible = true;
                tBSumBudget.Visible = true;
                tBSumTimmar.Visible = true;
                tBSumAvtal.Location = new Point((dgvBPK.Columns[prodIDColumn].Width + dgvBPK.Columns[prodNameColumn].Width), 0);
                tBSumAvtal.Width = dgvBPK.Columns[avtalColumn].Width;
                tbSumTillägg.Location = new Point((dgvBPK.Columns[prodIDColumn].Width + dgvBPK.Columns[prodNameColumn].Width + dgvBPK.Columns[avtalColumn].Width + dgvBPK.Columns[gradAvtalColumn].Width), 0);
                tbSumTillägg.Width = dgvBPK.Columns[tilläggColumn].Width;
                tBSumBudget.Location = new Point((dgvBPK.Columns[prodIDColumn].Width + dgvBPK.Columns[prodNameColumn].Width + dgvBPK.Columns[avtalColumn].Width + dgvBPK.Columns[gradAvtalColumn].Width + dgvBPK.Columns[tilläggColumn].Width + dgvBPK.Columns[gradTilläggColumn].Width), 0);
                tBSumBudget.Width = dgvBPK.Columns[budgetColumn].Width;
                tBSumTimmar.Location = new Point((dgvBPK.Columns[prodIDColumn].Width + dgvBPK.Columns[prodNameColumn].Width + dgvBPK.Columns[avtalColumn].Width + dgvBPK.Columns[gradAvtalColumn].Width + dgvBPK.Columns[tilläggColumn].Width + dgvBPK.Columns[gradTilläggColumn].Width + dgvBPK.Columns[budgetColumn].Width), 0);
                tBSumTimmar.Width = dgvBPK.Columns[timColumn].Width;
                TbSummering();

            }
            else
            {
                clearDatagridView();
            }


        }
        //Metod för att summera avtal, tillägg och budget och fylla respektive tb med rätt värde
        private void TbSummering()
        {
            int avtal = 0;
            for (int i = 0; i < dgvBPK.Rows.Count; i++)
            {
                avtal = avtal + int.Parse(dgvBPK.Rows[i].Cells[avtalColumn].Value.ToString());


            }
            tBSumAvtal.Text = avtal.ToString();
            int tillagg = 0;
            for (int j = 0; j < dgvBPK.Rows.Count; j++)
            {
                tillagg = tillagg + int.Parse(dgvBPK.Rows[j].Cells[tilläggColumn].Value.ToString());
            }
            tbSumTillägg.Text = tillagg.ToString();

            int budget = 0;
            for (int k = 0; k < dgvBPK.Rows.Count; k++)
            {
                budget = budget + int.Parse(dgvBPK.Rows[k].Cells[budgetColumn].Value.ToString());
            }
            tBSumBudget.Text = budget.ToString();

            int timmar = 0;
            for (int l = 0; l < dgvBPK.Rows.Count; l++)
            {
                timmar = timmar + int.Parse(dgvBPK.Rows[l].Cells[timColumn].Value.ToString());
            }
            tBSumTimmar.Text = timmar.ToString();

        }

        //Markerar en rad i dgvn
        private void dgvBPK_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            cmbGradA.Items.Clear();
            cmbGradT.Items.Clear();
            cmbGradA.Items.Add("Osäker");
            cmbGradA.Items.Add("Säker");
            cmbGradT.Items.Add("Osäker");
            cmbGradT.Items.Add("Säker");
            int currentRow = dgvBPK.CurrentCell.RowIndex;

            if (dgvBPK.Rows[currentRow].Cells[prodIDColumn].Value != null)
            {
                cmbProdID.Text = dgvBPK.Rows[currentRow].Cells[prodIDColumn].Value.ToString();
            }
            if (dgvBPK.Rows[currentRow].Cells[prodNameColumn].Value != null)
            {
                cmbProdNamn.Text = dgvBPK.Rows[currentRow].Cells[prodNameColumn].Value.ToString();
            }
            if (dgvBPK.Rows[currentRow].Cells[avtalColumn].Value != null)
            {
                tBAvtal.Text = dgvBPK.Rows[currentRow].Cells[avtalColumn].Value.ToString();
            }
            if (dgvBPK.Rows[currentRow].Cells[gradAvtalColumn].Value != null)
            {

                if (dgvBPK.Rows[currentRow].Cells[gradAvtalColumn].Value.ToString().Trim() == "Osäker")
                {
                    cmbGradA.SelectedIndex = 0;
                }
                if (dgvBPK.Rows[currentRow].Cells[gradAvtalColumn].Value.ToString().Trim() == "Säker")
                {
                    cmbGradA.SelectedIndex = 1;
                }




            }
            if (dgvBPK.Rows[currentRow].Cells[tilläggColumn].Value != null)
            {
                tBTillagg.Text = dgvBPK.Rows[currentRow].Cells[tilläggColumn].Value.ToString();
            }
            if (dgvBPK.Rows[currentRow].Cells[gradTilläggColumn].Value != null)
            {
                if (dgvBPK.Rows[currentRow].Cells[gradTilläggColumn].Value.ToString().Trim() == "Osäker")
                {
                    cmbGradT.SelectedIndex = 0;
                }
                if (dgvBPK.Rows[currentRow].Cells[gradTilläggColumn].Value.ToString().Trim() == "Säker")
                {
                    cmbGradT.SelectedIndex = 1;
                }



            }
            if (dgvBPK.Rows[currentRow].Cells[budgetColumn].Value != null)
            {
                tBBudg.Text = dgvBPK.Rows[currentRow].Cells[budgetColumn].Value.ToString();
            }
            if (dgvBPK.Rows[currentRow].Cells[timColumn].Value != null)
            {
                tBTim.Text = dgvBPK.Rows[currentRow].Cells[timColumn].Value.ToString();
            }
            if (dgvBPK.Rows[currentRow].Cells[commentColumn].Value != null)
            {
                tBKommentar.Text = dgvBPK.Rows[currentRow].Cells[commentColumn].Value.ToString();
            }
            currentBudgetID = int.Parse(dgvBPK.Rows[currentRow].Cells[intäktsBudgIDColumn].Value.ToString());
            flpCateGroupFilters.Height = 0;
            IsNewBudget = false;
            EditableTbs(true);
        }
        private void EditableTbs(bool IsEditable)
        {

            cmbProdID.Enabled = IsNewBudget;
            cmbProdNamn.Enabled = IsNewBudget;
            cmbProdGrupp.Enabled = IsNewBudget;
            cmbProdKategori.Enabled = IsNewBudget;

            tBAvtal.Enabled = IsEditable;
            cmbGradT.Enabled = IsEditable;
            cmbGradA.Enabled = IsEditable;
            tBTillagg.Enabled = IsEditable;
            cmbGradT.Enabled = IsEditable;
            btnTabRad.Enabled = IsEditable;
            tBTim.Enabled = IsEditable;
            tBKommentar.Enabled = IsEditable;
            tBAvtal.Focus();
        }
        private void clearTbs()
        {
            tBAvtal.Text = "0";
            cmbGradA.Items.Clear();
            cmbGradT.Items.Clear();

            cmbGradA.Items.Add("Osäker");
            cmbGradA.Items.Add("Säker");
            cmbGradT.Items.Add("Osäker");
            cmbGradT.Items.Add("Säker");


            tBTillagg.Text = "0";
            tBBudg.Text = "0";
            tBTim.Text = "0";
            tBKommentar.Text = "";
            if (IsNewBudget)
            {
                cmbProdID.Text = "";
                cmbProdNamn.Text = "";
                cmbProdGrupp.Text = "";
                cmbProdKategori.Text = "";
            }

        }


        private void btnNyRad_Click(object sender, EventArgs e)
        {

            IsNewBudget = true;
            clearTbs();
            cmbGradA.SelectedIndex = 0;
            cmbGradT.SelectedIndex = 0;
            EditableTbs(true);
            RetrieveProducts();
            flpCateGroupFilters.Height = 84;

        }
        private void RetrieveProducts()
        {
            pC = new Domain.ProdukController();
            productList = pC.Produktlista;
            fillSearchOptions();
        }
        private void ClearLists()
        {
            cmbProdID.Items.Clear();
            cmbProdNamn.Items.Clear();
            cmbProdGrupp.Items.Clear();
            cmbProdKategori.Items.Clear();
        }

        private void fillSearchOptions()
        {

            ClearLists();
            foreach (Produktregister p in productList)
            {
                if (!cmbProdGrupp.Items.Contains(p.Produktgrupp.produktGruppNamn))
                {
                    cmbProdGrupp.Items.Add(p.Produktgrupp.produktGruppNamn);
                }
                if (!cmbProdKategori.Items.Contains(p.Produktkategori.produktKategoriNamn))
                {
                    cmbProdKategori.Items.Add(p.Produktkategori.produktKategoriNamn);
                }
                cmbProdNamn.Items.Add(p.produkt);
                cmbProdID.Items.Add(p.produktID);
            }
        }
        private void ProdKategoriChange(object sender, EventArgs e)
        {
            cmbProdID.Items.Clear();
            cmbProdNamn.Items.Clear();
            cmbProdGrupp.Items.Clear();
            cmbProdNamn.Text = "";
            cmbProdID.Text = "";
            cmbProdGrupp.Text = "";
            foreach (Produktregister p in productList)
            {
                if (cmbProdKategori.Text == p.Produktkategori.produktKategoriNamn)
                {
                    if (!cmbProdGrupp.Items.Contains(p.Produktgrupp.produktGruppNamn))
                    {
                        cmbProdGrupp.Items.Add(p.Produktgrupp.produktGruppNamn);
                    }
                    cmbProdNamn.Items.Add(p.produkt);
                    cmbProdID.Items.Add(p.produktID);
                }
            }
        }

        private void ProdGroupChange(object sender, EventArgs e)
        {
            cmbProdID.Items.Clear();
            cmbProdNamn.Items.Clear();
            cmbProdNamn.Text = "";
            cmbProdID.Text = "";
            foreach (Produktregister p in productList)
            {
                if (cmbProdGrupp.Text == p.Produktgrupp.produktGruppNamn)
                {
                    cmbProdNamn.Items.Add(p.produkt);
                    cmbProdID.Items.Add(p.produktID);
                }
            }
        }

        private void ProdNameChange(object sender, EventArgs e)
        {
            foreach (Produktregister p in productList)
            {
                if (p.produkt == cmbProdNamn.Text)
                {
                    cmbProdID.Text = p.produktID;

                    break;
                }
            }
        }

        private void ProdIDChange(object sender, EventArgs e)
        {
            foreach (Produktregister p in productList)
            {
                if (p.produktID == cmbProdID.Text)
                {
                    cmbProdNamn.Text = p.produkt;
                    break;
                }
            }
        }

        private void onTextChange(object sender, EventArgs e)
        {
            string avtal = tBAvtal.Text;
            string tillagg = tBTillagg.Text;
            string gradA = cmbGradA.Text;
            string gradT = cmbGradT.Text;


            string tim = tBTim.Text;

            string prodId = cmbProdID.Text;
            string prodNamn = cmbProdNamn.Text;

            kC = new KundController();
            bool validated = kC.BudgetValidation(avtal, tillagg, gradA, gradT, tim, prodId, prodNamn, currentKundID, currentKundNamn);
            if (validated)
            {
                int intAvtal = Convert.ToInt32(tBAvtal.Text);
                int intTillagg = Convert.ToInt32(tBTillagg.Text);
                int sum = intAvtal + intTillagg;
                tBBudg.Text = Convert.ToString(sum);



                btnSpara.Enabled = true;
            }
            else
            {
                btnSpara.Enabled = false;
            }

        }

        private void btnSpara_Click(object sender, EventArgs e)
        {
            string avtal = tBAvtal.Text;
            string tillagg = tBTillagg.Text;
            string gradA = cmbGradA.Text;
            string gradT = cmbGradT.Text;
            string tim = tBTim.Text;
            string kommentar = tBKommentar.Text;

            string prodId = cmbProdID.Text;
            string prodNamn = cmbProdNamn.Text;

            kC = new KundController();
            bool IsSuccessfull = kC.CreateBudgetRow(avtal, tillagg, gradA, gradT, tim, kommentar, prodId, prodNamn, currentKundID, currentBudgetID, IsNewBudget, true);
            if (IsSuccessfull)
            {
                clearTbs();
                EditableTbs(false);

                //////////////////////////////////
                //          Jobba här           //
                //////////////////////////////////

                kC.UpdateSideIntäktsBudgeteringCustomers(currentKundID);
            }
        }

        private void btnTabRad_Click(object sender, EventArgs e)
        {

            DialogResult ValidateBox = MessageBox.Show("Vill du verkligen ta bort denna budgetrad?", "Borttagning av Budgetrad", MessageBoxButtons.YesNo);
            if (ValidateBox == DialogResult.Yes)
            {
                kC = new KundController();
                bool isSuccessful = kC.RemoveBudgetRow(currentBudgetID);
                if (isSuccessful)
                {
                    kC.UpdateCustomerBudgetDGV(currentKundID, "", "", "", "");
                }
                else
                {
                    //DoSomething
                }
            }
            if (ValidateBox == DialogResult.No)
            {
                //DO Nothing
            }
        }
        public void HideSum()
        {
            lblTotalbelopp.Visible = false;
            tbSumTillägg.Visible = false;
            tBSumAvtal.Visible = false;
            tBSumBudget.Visible = false;
            tBSumTimmar.Visible = false;
        }

        private void tBTillagg_Leave(object sender, EventArgs e)
        {
            if (tBTillagg.Text == "")
            {
                tBTillagg.Text = "0";

            }
        }

        private void tBTim_Leave(object sender, EventArgs e)
        {
            if (tBTim.Text == "")
            {

                tBTim.Text = "0";
            }
        }






    }
}
